package com.moon.game.manager;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.log4j.Logger;

import com.moon.game.constants.Constants;
import com.moon.game.resource.model.Item;
import com.moon.game.util.Utils;

/**
 * @description 道具管理
 * @author Ranger 作者 E-mail:haozi000005@163.com
 * @version 创建时间：2012-5-11 下午3:55:18
 */
public class ItemMG {
	private static final Logger log = Logger.getLogger(MonsterMG.class);
	private static ConcurrentHashMap<Integer,Item> itemMap = new ConcurrentHashMap<Integer, Item>();
	private static ConcurrentHashMap<Integer,ArrayList<Item>> itemForType = new ConcurrentHashMap<Integer, ArrayList<Item>>();
	private static ConcurrentHashMap<Integer,ArrayList<Item>> itemForLevel = new ConcurrentHashMap<Integer, ArrayList<Item>>();
	private static ArrayList<Integer> moneyGoods = new ArrayList<Integer>();
	private static ArrayList<Integer> goldGoods = new ArrayList<Integer>();

	/**
	 * 碎银商城道具
	 * 
	 * @return the moneyGoods
	 */
	public ArrayList<Integer> getMoneyGoods() {
		return moneyGoods;
	}

	/**
	 * 金币商城道具
	 * 
	 * @return the goldGoods
	 */
	public ArrayList<Integer> getGoldGoods() {
		return goldGoods;
	}

	private ItemMG() {
	}
	public static ItemMG instance = new ItemMG();
	public void init() {
		log.debug("load items start...");
		loadItems();
		log.debug("load items end...");
	}
	
	/**
	 * 加载所有道具
	 * 
	 */
	private void loadItems() {
		List<Item> items = DBManager.queryAllItem();
		for (Item item : items) {
			//加载到道具列表中
			itemMap.put(item.getId(), item);
			
			//加载到道具分类列表中
			ArrayList<Item> itemTypeList = itemForType.get(item.getType());
			if (itemTypeList == null) {
				itemTypeList = new ArrayList<Item>();
			}
			itemTypeList.add(item);
			itemForType.put(item.getType(), itemTypeList);
			
			//加载到道具等级列表中
			ArrayList<Item> itemLevelList = itemForType.get(item.getType());
			if (itemLevelList == null) {
				itemLevelList = new ArrayList<Item>();
			}
			itemLevelList.add(item);
			itemForLevel.put(item.getLevel(), itemLevelList);
			
			//碎银道具
			if (item.getGoodsType() == Constants.MONEY_ITEM_TYPE && item.getMoney() > 0) {
				moneyGoods.add(item.getId());
			}
			//商城道具
			if (item.getGoodsType() == Constants.GOLD_ITEM_TYPE && item.getGold() > 0) {
				goldGoods.add(item.getId());
			}
		}
	}
	
	
	/**
	 * 根据道具id获取道具对象
	 * 
	 * @return
	 */
	public final Item getItem(int itemId) {
		return itemMap.get(itemId);
	}
	
	/**
	 * 获取道具资源
	 * 
	 * @return
	 */
	public final ConcurrentHashMap<Integer,Item> getItemRes() {
		return itemMap;
	}
	
	/**
	 * 根据道具type获取道具列表
	 * 
	 * @param type 0其他，1装备，2兽蛋
	 * @return
	 */
	public final ArrayList<Item> getItemForType(int type) {
		return itemForType.get(type);
	}
	
	/**
	 * 根据等级获取道具列表
	 * 
	 * @param level
	 * @return
	 */
	public final ArrayList<Item> getItemForLevel(int level) {
		return itemForLevel.get(level);
	}
	
	/**
	 * 非装备类道具工厂
	 * 
	 * @param itemId 道具id
	 * @return 装备类道具
	 */
	public Item itemFactory(int itemId) {
		final Item item = getItem(itemId);
		if (item != null && item.getPosition() > 0) {
			//此方法不添加装备
			return null;
		}
		Item newItem = new Item();
		Utils.copyProperties(newItem, item);
		return newItem;
	}
}
